Productos

Outputs2

Ventas

$2,297,201

Costos

$2,010,803

Ganancias

$286,398

Rendimiento total

Filtros {data-width = 1}

Filtros

Outputs {data-width = 950}

Rendimiento por producto

Análisis de segmentos

Entregas

Output

Ventas

Utilidad

---
title: "Desempeño en ventas"
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
    source_code: embed
---

```{r setup, include=FALSE}
library(flexdashboard)
library(readr)
library(lubridate)
library(dplyr)
library(DT)
library(scales)
library(plotly)
library(leaflet)
library(crosstalk)
library(htmltools)
```

```{r message=FALSE, warning=FALSE, include=FALSE}
mi_tienda <- read.csv('tienda.csv',stringsAsFactors = FALSE) %>%
  rename_with( ~ tolower(gsub(".","_",.x,fixed = TRUE)))

mi_tienda$sales <- sub(",","",mi_tienda$sales)
mi_tienda$profit <- sub(",","",mi_tienda$profit)

mi_tienda[,c("order_date","ship_date","sales","profit","year","cost")] <- as.data.frame(list(order_date = mdy(mi_tienda$order_date),
       ship_date = mdy(mi_tienda$ship_date),
       sales = as.numeric(mi_tienda$sales),
       profit = mutate(data.frame(profit = as.numeric(mi_tienda$profit)),
                       profit=ifelse(is.na(profit),0,profit)),
       year = year(mdy(mi_tienda$order_date))
       ))%>%
  mutate(cost = sales-profit)
```


```{r}
## DataShared para definir los productos más rentables
data_top <- SharedData$new(mi_tienda %>%
                             group_by(year, sub_category,product_name) %>%
                             dplyr::summarise(profit = sum(profit)/sum(cost),
                                              ventas = sum(sales),
                                              costos = sum(cost),
                                              segmentos = segment,
                                              state = state)%>%
                             arrange(desc(profit)))
```


# Productos

Outputs2
---
### Ventas
```{r fig.width=10, fig.height=1}
metricas <- mi_tienda%>%
  summarise(tsales = sum(sales),
            tcost = sum(cost),
            tprof = sum(profit))

valueBox(scales::dollar(metricas$tsales),
         icon = "fa-coins",
         color = ifelse(metricas$tsales < metricas$tcost, '#E3242B', '#74B72E'),
         caption = "Venta total")
```

### Costos
```{r fig.width=10, , fig.height=1}
valueBox(scales::dollar(metricas$tcost),
         icon = "fa-receipt",
         color = ifelse(metricas$tcost > metricas$tsales, '#E3242B', '#E3242B'),
         caption = "Costo total")
```


### Ganancias
```{r fig.width=10, , fig.height=1}
valueBox(scales::dollar(metricas$tprof),
         icon = "fa-medal",
         color = ifelse(metricas$tprof < 0, '#E3242B', '#1BBC9B'),
         caption = "Ganancia total")
```

### Rendimiento total
```{r fig.width=10, , fig.height=1}
profit <- round(metricas$tprof/metricas$tcost,2)*100

gauge(profit,min=0,max=100, symbol = '%', 
      gaugeSectors(success=c(80,100), 
                   warning = c(30,79), 
                   danger = c(0,29)
                   ))
```

Filtros {data-width = 1}
---
### Filtros
```{r fig.width = 7}
# Aplicación de filtro de año
filter_select("dt","Year",data_top,group = ~year, multiple = FALSE)

# Aplicación de filtro de subcategoría
filter_select("ctr","Sub_category", data_top, group = ~sub_category, multiple = FALSE)

# Aplicación de filtro de Estado
filter_select("ste","State", data_top, group = ~state, multiple = FALSE)
```

Outputs {data-width = 950}
---

### Rendimiento por producto
```{r echo=FALSE, fig.width=20}
## Mostrar las tablas
data_top %>%
  DT::datatable(rownames = FALSE, 
                filter = "none",
                colnames = c('Year','Subcategoria','Nombre del producto','Rendimiento'),
                
                options = list(dom = 't',
                               columnDefs = list(list(targets = "year",visible = FALSE),
                                                 list(targets = "sub_category", visible = FALSE),
                                                 list(targets = "ventas", visible = FALSE),
                                                 list(targets = "segmentos", visible = FALSE),
                                                 list(targets = "costos", visible = FALSE)),
                               pageLength = 5,
                               initComplete = JS("function(settings, json) {",
                                                 "$(this.api().table().header()).css({'background-color': '#F8DD74', 'color': '#000'});",
                                                 "}")))%>%
  formatPercentage('profit',digits = 2) %>%
  formatStyle('profit', backgroundColor = '#FAFCAF', fontWeight = 'bold')%>%
  formatStyle('product_name',  color = 'gray', fontWeight = 'bold')

```

### Análisis de segmentos
```{r fig.width=20}
#### Gráfico de segmentos ####
plot_ly(data_top,x=~segmentos,y=~ventas,color = "#99CCFF", type = "bar", barmode = 'stack',name = "Ventas",marker=list(line=list(color='#0', width=-4)))%>%
  add_trace(y = ~costos, color = "#F4A384", name = "Costos",marker=list(line=list(color='#0', width=-4)),barmode = 'stack')%>%
  add_trace(y = ~ventas-costos, color = "#B5EAD7", name = "Ganancia",marker=list(line=list(color='#0', width=-4)),barmode = 'stack')%>%
  layout(xaxis = list(title = ""),
         yaxis = list(title = 'US$',
                      titlefont = list(size = 12,color = 'gray')),
         legend = list(x = 0.90, y = 1),
         barmode = 'group', bargroupgap = 0.1)

```

# Entregas

Filtros {.sidebar}
---
### Filtros
```{r}
mapear <- SharedData$new(merge(mi_tienda,read.csv('lanlong.csv',stringsAsFactors = FALSE),
                               by.x = "state", by.y = "state.name")%>%
                           group_by(year,state,state.longitude,state.latitude,ship_mode)%>%
                           dplyr::summarise(sales = sum(sales),
                                            profit = sum(profit),
                                            cost = sum(cost)))

# Aplicación de filtro de año
filter_select("dt","Year",mapear,group = ~year, multiple = FALSE)

# Aplicación de filtro del modo de entrega
filter_select("shp","Ship_mode", mapear, group = ~ship_mode, multiple = FALSE)

```

Output
---
### Ventas
```{r}
leaflet(mapear) %>%
  addTiles() %>%
  setView(-97.0000000, 38.0000000, zoom = 4)%>%
  addCircles(lat = ~state.latitude, lng = ~state.longitude,
             weight=1, radius = ~sqrt(sales)*2000, color= "#74B72E",
             group = "sales", popup = ~htmlEscape(sales), 
             popupOptions = popupOptions(maxWidth ="100%", closeOnClick = TRUE))
  #addCircles(lat = ~state.latitude, lng = ~state.longitude, 
             #weight=1, radius = ~sqrt(profit)*2000, color= "#F6BE00",group = "profit")%>%
  #addLayersControl(overlayGroups = c("sales","profit"),
                   #options = layersControlOptions(collapsed = T), position="topleft")


```

### Utilidad
```{r}
leaflet(mapear) %>%
  addTiles() %>%
  setView(-97.0000000, 38.0000000, zoom = 4)%>%
  addCircles(lat = ~state.latitude, lng = ~state.longitude,
             weight=5, radius = ~sqrt(profit)*2000, color= "#F6BE00",
             group = "profit", popup = ~htmlEscape(profit), 
             popupOptions = popupOptions(maxWidth ="100%", closeOnClick = TRUE))
  #addCircles(lat = ~state.latitude, lng = ~state.longitude, 
             #weight=1, radius = ~sqrt(profit)*2000, color= "#F6BE00",group = "profit")%>%
  #addLayersControl(overlayGroups = c("sales","profit"),
                   #options = layersControlOptions(collapsed = T), position="topleft")


```